var input = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), "..", "day9.txt")).Select(long.Parse).ToArray(); IEnumerable<(T, T)> Pairs(IList items) { for (var outer = 0; outer < items.Count() - 1; outer++) for (var inner = outer + 1; inner < items.Count(); inner++) if (!items[outer].Equals(items[inner])) yield return (items[outer], items[inner]); } bool isValid(int pos) => Pairs(input.Skip(pos-25).Take(25).ToList()).Any(p => p.Item1 + p.Item2 == input[pos]); var part1 = Enumerable.Range(25, input.Length-25).Where(i => !isValid(i)).Select(i => input[i]).First(); long[] findWeakness(int pos){ var numbers = new List(); while (numbers.Sum() < part1) numbers.Add(input[pos+numbers.Count()]); return numbers.Sum() == part1 ? numbers.ToArray() : null; } var w = Enumerable.Range(0, input.Length).Select(findWeakness).First(o => o != null); var part2 = w.Max() + w.Min(); part2.Dump();